package co.yixiang.modules.system.service;

import co.yixiang.common.service.BaseService;
import co.yixiang.modules.system.entity.domain.FreightTemplate;
import co.yixiang.modules.system.entity.dto.FreightTemplateQueryCriteria;
import co.yixiang.modules.system.entity.vo.FreightTemplateVo;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.data.domain.Pageable;

import java.util.List;
import java.util.Map;

@CacheConfig(cacheNames = "{freightTemplate}")
public interface FreightTemplateService extends BaseService<FreightTemplate> {

    /**
     * 查询数据分页
     * @param criteria 条件
     * @param pageable 分页参数
     * @return Map<String, Object>
     */
    Map<String, Object> queryAll(FreightTemplateQueryCriteria criteria, Pageable pageable);

    /**
     * 查询所有数据不分页
     * @param criteria 条件参数
     * @return List<UserDto>
     */
    List<FreightTemplate> queryAll(FreightTemplateQueryCriteria criteria);

    /**
     * 获取商家的运费模板
     *
     * @param freightTemplateId
     * @return 运费模板列表
     */
    List<FreightTemplateVo> getFreightTemplateList(String freightTemplateId);

    /**
     * 获取运费模板详细信息
     *
     * @param id 运费模板ID
     * @return 运费模板
     */
    // @Cacheable(key = "#id")
    FreightTemplateVo getFreightTemplate(String id);

    /**
     * 添加商家运费模板
     * 运费模板分为卖家包邮、运费计算两种类型
     *
     * @param freightTemplateVO 运费模板
     * @return 运费模板
     */
    FreightTemplateVo addFreightTemplate(FreightTemplateVo freightTemplateVO);

    /**
     * 修改商家运费模板
     *
     * @param freightTemplateVo 运费模板
     * @return 运费模板
     */
    //@CacheEvict(key = "#freightTemplateVo.id")
    FreightTemplateVo editFreightTemplate(FreightTemplateVo freightTemplateVo);

    /**
     * 删除商家运费模板
     * 删除模板并删除模板的配置内容
     *
     * @param id 运费模板ID
     * @return 操作状态
     */
    @CacheEvict(key = "#id")
    boolean removeFreightTemplate(String id);
}
